// axios二次封装的目的
// 1、利用axios请求、响应拦截器功能 2、请求拦截器，一般可以在请求头中携带公共参数：token 3、简化服务器返回数据，处理http网络错误
import axios from 'axios';
import { ElMessage } from 'element-plus';
// 引入用户相关仓库
import useUserStore from '../store/modules/user'
// 利用axios.creat方法创建一个axios实例，设置基础路径、超时的时间设置
const request = axios.create({
    baseURL:'/api',//请求基础路径设置
    timeout:2000//超时5秒表示失败
});
// 请求拦截器
request.interceptors.request.use(config=>{
    // 获取用户仓库
    let userStore = useUserStore();
    // token 公共参数，如果用户登录了需要携带
    if(userStore.userInfo.token){
        config.headers.token = userStore.userInfo.token;
    }
    // config:请求拦截器回调注入对象(配置对象),最重要的一件事headers属性
    // 可以通过请求头携带公共参数-token
    return config;
});
// 响应拦截器
request.interceptors.response.use(response=>{
    // 相应拦截器成功回调，一般进行简化数据
    return response.data;
},(error)=>{ 
    // 处理http网络错误
    // Promise对象代表一个异步操作，有三种状态：pending（进行中）、fulfilled（已成功）和rejected（已失败）
    let status = error.response.status;
    switch(status){
        case 404:
            ElMessage({
                type:'error',
                message:'请求路径错误'
            })
            break;
        case 500:
            ElMessage({
                type:'error',
                message:'服务器有问题'
            })
            break;
    }
    return Promise.reject(new Error(error.message))
})

// 对外暴漏axios
export default request;